using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._DataManagementTools._Raster._OrthoMapping
{
    /// <summary>
    /// <para>Apply Block Adjustment</para>
    /// <para>Applies the geographic adjustments
    /// to the mosaic dataset items. This tool uses the solution table from the Compute Block Adjustments tool.</para>
    /// <para>应用地理调整
    /// 到镶嵌数据集项目。此工具使用计算块调整工具中的解决方案表。</para>
    /// </summary>    
    [DisplayName("Apply Block Adjustment")]
    public class ApplyBlockAdjustment : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public ApplyBlockAdjustment()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_mosaic_dataset">
        /// <para>Input Mosaic Dataset</para>
        /// <para>The input mosaic dataset to adjust.</para>
        /// <para>要调整的输入镶嵌数据集。</para>
        /// </param>
        /// <param name="_adjustment_operation">
        /// <para>Adjustment Operation</para>
        /// <para><xdoc>
        ///   <para>Choose whether you want to adjust the mosaic dataset using the solution table or if you want to reset the mosaic dataset so there are no adjustments applied.</para>
        ///   <bulletList>
        ///     <bullet_item>Adjust the mosaic dataset—Adjust the mosaic dataset using the input solution table.</bullet_item><para/>
        ///     <bullet_item>Reset the mosaic dataset—Reset the mosaic dataset so there are no adjustments applied to it.</bullet_item><para/>
        ///     <bullet_item>Reactivate image status—Images dropped from the adjustment will be restored to active status. Images without the minimum number of control points required for adjustment are dropped from the computation in the standard adjustment operation, such that the images are categorized as Inactive in the footprints table, the maxPS value is set to 0, the imagery is not visible in the map, and the tie points statuses for the dropped images are disabled. This option will restore the Category status to Primary and ensure the maxPS value is resumed. Images that were included in the adjustment process are unaffected by this option.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>选择是要使用解决方案表调整镶嵌数据集，还是要重置镶嵌数据集，以便不应用任何调整。</para>
        ///   <bulletList>
        ///     <bullet_item>调整镶嵌数据集 - 使用输入解决方案表调整镶嵌数据集。</bullet_item><para/>
        ///     <bullet_item>重置镶嵌数据集 - 重置镶嵌数据集，以便不对其应用任何调整。</bullet_item><para/>
        ///     <bullet_item>重新激活影像状态 - 从调整中删除的图像将恢复为活动状态。在标准调整操作中，没有调整所需的最小控制点数的图像将从计算中删除，这样，在轮廓线表中将图像分类为非活动，maxPS 值设置为 0，图像在地图中不可见，并且删除图像的连接点状态被禁用。此选项会将“类别”状态恢复为“主要”，并确保恢复 maxPS 值。调整过程中包含的图像不受此选项的影响。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// </param>
        public ApplyBlockAdjustment(object _in_mosaic_dataset, _adjustment_operation_value _adjustment_operation)
        {
            this._in_mosaic_dataset = _in_mosaic_dataset;
            this._adjustment_operation = _adjustment_operation;
        }
        public override string ToolboxName => "Data Management Tools";

        public override string ToolName => "Apply Block Adjustment";

        public override string CallName => "management.ApplyBlockAdjustment";

        public override List<string> AcceptEnvironments => [];

        public override object[] ParameterInfo => [_in_mosaic_dataset, _adjustment_operation.GetGPValue(), _input_solution_table, _pan_to_ms_scaling_factor, _out_mosaic_dataset, _DEM, _zoffset, _control_point_table, _adjust_footprints.GetGPValue(), _solution_point_table, _out_control_point_table];

        /// <summary>
        /// <para>Input Mosaic Dataset</para>
        /// <para>The input mosaic dataset to adjust.</para>
        /// <para>要调整的输入镶嵌数据集。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Mosaic Dataset")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_mosaic_dataset { get; set; }


        /// <summary>
        /// <para>Adjustment Operation</para>
        /// <para><xdoc>
        ///   <para>Choose whether you want to adjust the mosaic dataset using the solution table or if you want to reset the mosaic dataset so there are no adjustments applied.</para>
        ///   <bulletList>
        ///     <bullet_item>Adjust the mosaic dataset—Adjust the mosaic dataset using the input solution table.</bullet_item><para/>
        ///     <bullet_item>Reset the mosaic dataset—Reset the mosaic dataset so there are no adjustments applied to it.</bullet_item><para/>
        ///     <bullet_item>Reactivate image status—Images dropped from the adjustment will be restored to active status. Images without the minimum number of control points required for adjustment are dropped from the computation in the standard adjustment operation, such that the images are categorized as Inactive in the footprints table, the maxPS value is set to 0, the imagery is not visible in the map, and the tie points statuses for the dropped images are disabled. This option will restore the Category status to Primary and ensure the maxPS value is resumed. Images that were included in the adjustment process are unaffected by this option.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>选择是要使用解决方案表调整镶嵌数据集，还是要重置镶嵌数据集，以便不应用任何调整。</para>
        ///   <bulletList>
        ///     <bullet_item>调整镶嵌数据集 - 使用输入解决方案表调整镶嵌数据集。</bullet_item><para/>
        ///     <bullet_item>重置镶嵌数据集 - 重置镶嵌数据集，以便不对其应用任何调整。</bullet_item><para/>
        ///     <bullet_item>重新激活影像状态 - 从调整中删除的图像将恢复为活动状态。在标准调整操作中，没有调整所需的最小控制点数的图像将从计算中删除，这样，在轮廓线表中将图像分类为非活动，maxPS 值设置为 0，图像在地图中不可见，并且删除图像的连接点状态被禁用。此选项会将“类别”状态恢复为“主要”，并确保恢复 maxPS 值。调整过程中包含的图像不受此选项的影响。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Adjustment Operation")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public _adjustment_operation_value _adjustment_operation { get; set; }

        public enum _adjustment_operation_value
        {
            /// <summary>
            /// <para>Adjust the mosaic dataset</para>
            /// <para>Adjust the mosaic dataset—Adjust the mosaic dataset using the input solution table.</para>
            /// <para>调整镶嵌数据集 - 使用输入解决方案表调整镶嵌数据集。</para>
            /// </summary>
            [Description("Adjust the mosaic dataset")]
            [GPEnumValue("ADJUST")]
            _ADJUST,

            /// <summary>
            /// <para>Reset the mosaic dataset</para>
            /// <para>Reset the mosaic dataset—Reset the mosaic dataset so there are no adjustments applied to it.</para>
            /// <para>重置镶嵌数据集 - 重置镶嵌数据集，以便不对其应用任何调整。</para>
            /// </summary>
            [Description("Reset the mosaic dataset")]
            [GPEnumValue("RESET")]
            _RESET,

            /// <summary>
            /// <para>Reactivate image status</para>
            /// <para>Reactivate image status—Images dropped from the adjustment will be restored to active status. Images without the minimum number of control points required for adjustment are dropped from the computation in the standard adjustment operation, such that the images are categorized as Inactive in the footprints table, the maxPS value is set to 0, the imagery is not visible in the map, and the tie points statuses for the dropped images are disabled. This option will restore the Category status to Primary and ensure the maxPS value is resumed. Images that were included in the adjustment process are unaffected by this option.</para>
            /// <para>重新激活影像状态 - 从调整中删除的图像将恢复为活动状态。在标准调整操作中，没有调整所需的最小控制点数的图像将从计算中删除，这样，在轮廓线表中将图像分类为非活动，maxPS 值设置为 0，图像在地图中不可见，并且删除图像的连接点状态被禁用。此选项会将“类别”状态恢复为“主要”，并确保恢复 maxPS 值。调整过程中包含的图像不受此选项的影响。</para>
            /// </summary>
            [Description("Reactivate image status")]
            [GPEnumValue("REACTIVATE")]
            _REACTIVATE,

        }

        /// <summary>
        /// <para>Input Solution Table</para>
        /// <para>Specify a solution table to use when adjusting your mosaic dataset. This is the output from the Compute Block Adjustments tool.</para>
        /// <para>指定调整镶嵌数据集时要使用的解决方案表。这是计算块调整工具的输出。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Solution Table")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _input_solution_table { get; set; } = null;


        /// <summary>
        /// <para>Pan-To-MS Scaling Factor</para>
        /// <para>If your mosaic dataset contains pan-sharpened rasters, specify the scaling factor between the pan-sharpened resolution and the multispectral resolution.</para>
        /// <para>如果镶嵌数据集包含平移锐化栅格，请指定平移锐化分辨率和多光谱分辨率之间的比例因子。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Pan-To-MS Scaling Factor")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public double? _pan_to_ms_scaling_factor { get; set; } = null;


        /// <summary>
        /// <para>Updated Input Mosaic Dataset</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Updated Input Mosaic Dataset")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _out_mosaic_dataset { get; set; }


        /// <summary>
        /// <para>Input DEM</para>
        /// <para><xdoc>
        ///   <para>A DEM to use within the application of the block adjustment. This DEM will only be used if it is a higher resolution than any DEM that may already exist within the mosaic dataset.</para>
        ///   <para>If this input DEM is used, the geometric function of the mosaic dataset will be updated using this input.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>在块调整应用程序中使用的 DEM。仅当此 DEM 的分辨率高于镶嵌数据集中可能已存在的任何 DEM 时，才会使用该 DEM。</para>
        ///   <para>如果使用此输入 DEM，则镶嵌数据集的几何函数将使用此输入进行更新。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input DEM")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _DEM { get; set; } = null;


        /// <summary>
        /// <para>Z offset</para>
        /// <para>The vertical offset used to adjust the elevation layer within the mosaic dataset's Geometric function.</para>
        /// <para>用于在镶嵌数据集的几何函数中调整高程图层的垂直偏移量。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Z offset")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public double? _zoffset { get; set; } = null;


        /// <summary>
        /// <para>Control Point Table</para>
        /// <para>The input control point table will have the same adjustments applied as the solution table adjustments.</para>
        /// <para>输入控制点表将应用与解决方案表调整相同的调整。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Control Point Table")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _control_point_table { get; set; } = null;


        /// <summary>
        /// <para>Adjust Footprints</para>
        /// <para><xdoc>
        ///   <para>Choose whether to update the footprint geometry using the same transformation that was applied to the image.
        ///   <bulletList>
        ///     <bullet_item>Unchecked—Do not update the footprint geometry. This is the default.  </bullet_item><para/>
        ///     <bullet_item>Checked—Update the footprint geometry to the image geometry. The control point table will also be transformed, if one is provided.  </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para><xdoc>
        /// <para>选择是否使用应用于图像的相同变换来更新封装几何。
        ///   <bulletList>
        ///     <bullet_item>未选中 （Unchecked） - 不更新封装几何。这是默认设置。 </bullet_item><para/>
        ///     <bullet_item>选中 （Checked） - 将封装几何更新为影像几何。控制点表也将进行转换（如果提供）。 </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Adjust Footprints")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _adjust_footprints_value _adjust_footprints { get; set; } = _adjust_footprints_value._false;

        public enum _adjust_footprints_value
        {
            /// <summary>
            /// <para>ADJUST_FOOTPRINTS</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("ADJUST_FOOTPRINTS")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>NO_ADJUST_FOOTPRINTS</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("NO_ADJUST_FOOTPRINTS")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Solution Point Table</para>
        /// <para>Specify a solution points table to use to update the status field for the control point table. This parameter is used only when the Control Point Table parameter is set.</para>
        /// <para>指定用于更新控制点表的状态字段的解决方案点表。仅当设置了控制点表参数时，才使用此参数。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Solution Point Table")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _solution_point_table { get; set; } = null;


        /// <summary>
        /// <para>Output Control Points</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Control Points")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _out_control_point_table { get; set; }


        public ApplyBlockAdjustment SetEnv()
        {
            base.SetEnv();
            return this;
        }

    }

}